<template>
  <section>装饰者模式</section>
</template>

<script>
/**
 * @Description:装饰者模式
 * @author ZY
 * @date 2022/11/23 22:41
 */
export default {
  name: "DesignDecorator",
  data() {
    return {}
  },
  created() {
    console.log('*******装饰者模式开始********')
    this.main()
    console.log('*******装饰者模式结束********')
  },
  methods: {
    /*
    * 装饰者模式：动态地给某个对象添加一些额外的职责，，是一种实现继承的替代方案
    * 装饰者模式：在不改变原对象的基础上，通过对其进行包装扩展，使原有对象可以满足用户的更复杂需求，而不会影响从这个类中派生的其他对象
    * */
    main() {
      class Cellphone {
        create() {
          console.log('生成一个手机')
        }
      }

      class Decorator {
        constructor(cellphone) {
          this.cellphone = cellphone
        }

        create() {
          this.cellphone.create()
          this.createShell(cellphone)
        }

        createShell() {
          console.log('生成手机壳')
        }
      }

      // 测试代码
      let cellphone = new Cellphone()
      cellphone.create()

      console.log('------------')
      let dec = new Decorator(cellphone)
      dec.create()
    }
  }
}
</script>

<style scoped>

</style>
